//
// Created by pzw on 24-2-22.
//

#ifndef QTTEST_FILE_STDIO_H
#define QTTEST_FILE_STDIO_H

#include <stdio.h>
#include <stdarg.h>

class file_stdio {
public:
    FILE *file_stdio_fopen(const char *filename, const char *mode);
    size_t file_stdio_fread(void *ptr, size_t size, size_t nitems, FILE *stream);
    size_t file_stdio_fwrite(void *ptr, size_t size, size_t nitems, FILE *stream);
    int file_stdio_fclose(FILE *stream);

public:
    int file_stdio_fflush(FILE *stream);
    int file_stdio_fseek(FILE *stream, long int offset, int whence);
public:
    int file_stdio_fgetc(FILE *stream);
    int file_stdio_getc(FILE *stream);
    int file_stdio_getchar();
    int file_stdio_fputc(int c, FILE *stream);
    int file_stdio_putc(int c, FILE *stream);
    int file_stdio_putchar(int c);
public:
    char *file_stdio_fgets(char *s, int n, FILE *stream);
    char *file_stdio_gets(char *s);
public:
    int file_stdio_printf(const char *format, ...);
    int file_stdio_sprintf(char *s, const char *format, ...);
    int file_stdio_fprintf(FILE *stream, const char *format, ...);
    int file_stdio_scanf(const char *format, ...);
    int file_stdio_fscanf(FILE *stream, const char *format, ...);
    int file_stdio_sscanf(char *s, const char *format, ...);
public:
    int file_stdio_ferror(FILE *stream);
    int file_stdio_feof(FILE *stream);
    void file_stdio_clearerr(FILE *stream);
public:
    /*
     * 每个文件流都和一个底层文件描述符相关联；你可以把底层的输入输出操作与高层的文件流操作混合使用；
     * 但一般来说，这不是明智的做法，因为数据缓冲的后果是十分难以预料的；
     */
    int file_stdio_fileno(FILE *stream);
    /*
     * 每个文件流都和一个底层文件描述符相关联；你可以把底层的输入输出操作与高层的文件流操作混合使用；
     * 但一般来说，这不是明智的做法，因为数据缓冲的后果是十分难以预料的；
     */
    FILE *file_stdio_fdopen(int fildes, const char *mode);
};

int file_stdio_main();

#endif //QTTEST_FILE_STDIO_H
